#ifndef MESSAGEEDITAREA_H
#define MESSAGEEDITAREA_H

#include <QLabel>
#include <QPlainTextEdit>
#include <QPushButton>
#include <QWidget>

#include "model/data.h"

/**
 * @class MessageEditArea
 * @brief 消息编辑区域类，用于在图形用户界面中编辑和发送消息。
 *
 * 该类继承自QWidget，用于创建一个消息编辑区域，用户可以在其中输入和发送文本消息、图片和文件。
 *
 * 核心功能包括：
 * - 初始化信号和槽机制
 * - 发送文本消息
 * - 添加自发送和对方发送的消息
 * - 处理发送图片和文件的按钮点击事件
 * - 处理语音录制按钮的按下和释放事件，并发送语音消息
 *
 * 使用示例：
 * @code
 * MessageEditArea* editArea = new MessageEditArea(parentWidget);
 * editArea->initSignalSlot();
 * editArea->sendTextMessage();
 * @endcode
 *
 * 构造函数参数：
 * - QWidget *parent: 父窗口部件，默认为nullptr
 *
 */
class MessageEditArea : public QWidget
{
    Q_OBJECT
  public:
    explicit MessageEditArea( QWidget *parent = nullptr );

    void initSignalSlot();
    void sendTextMessage();
    void addSelfMessage( model::MessageType messageType,
                         const QByteArray &content, const QString &extraInfo );
    void addOtherMessage( const model::Message &message );

    void clickSendImageBtn();
    void clickSendFileBtn();

    void soundRecordPressed();
    void soundRecordReleased();
    void sendSpeech( const QString &path );

  private:
    QPushButton *sendImageBtn;
    QPushButton *sendFileBtn;
    QPushButton *sendSpeechBtn;
    QPushButton *showHistoryBtn;
    QPlainTextEdit *textEdit;
    QPushButton *sendTextBtn;
    QLabel *tipLabel;

  signals:
};

#endif // MESSAGEEDITAREA_H
